package com.bao.auth.server.biz.service.auth;

import com.bao.auth.dto.auth.UserUpdatePasswordDTO;
import com.bao.auth.entity.auth.User;
import com.bao.databases.mybatis.conditions.query.LbqWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;

/**
 * 基于mybatisplus的IService接口，
 * 实现用户业务接口功能
 * 底下的impl和mapper，只用写当前接口里面的接口就行，其他基本的增删改，mybatisplus中有，
 * 或者有想重写的方法，也可以写在这个接口里面，重新实现
 */
public interface UserService extends IService<User> {

    /**
     * 根据角色id 和 账号或名称 查询角色关联的用户
     * @param roleId 角色id
     * @param keyword 账号或名称
     * @return  注意：该接口只返回 id，账号，姓名，手机，性别
     */
    List<User> findUserByRoleId(Long roleId, String keyword);

    /**
     * 修改输错密码的次数（有密码错误限制，当超过一定次数，得暂停用户登录一段时间）
     * @param id 用户id
     */
    void updatePasswordErrorNumById(Long id);

    /**
     * 根据账号查询用户
     * @param account
     * @return
     */
    User getByAccount(String account);

    /**
     * 更新最后一次登录 时间
     * @param account
     */
    void updateLoginTime(String account);

    /**
     * 保存
     * @param user
     * @return
     */
    User saveUser(User user);

    /**
     * 重置密码，但是有效期就一小时，需要重置后立即修改密码
     * @param ids
     * @return
     */
    String reset(List<Long> ids);

    /**
     * 更新用户
     * @param user
     * @return
     */
    User updateUser(User user);

    /**
     * 删除用户（状态删除）
     */
    boolean remove(List<Long> ids);

    /**
     * 分页查询
     * @param page
     * @param wrapper
     * @return
     */
    IPage<User> findPage(IPage<User> page, LbqWrapper<User> wrapper);

    /**
     * 修改密码
     * @param data
     * @return
     */
    Boolean updatePassword(UserUpdatePasswordDTO data);

    /**
     * 重置密码错误 次数
     * @param id
     * @return
     */
    int resetPassErrorNum(Long id);
}
